iT邦幫忙

2

如何在三層架構中使用VLAN或VPC保護應用

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20241207/20164635on4kCEAbyI.png

透過VPC實現網路隔離能在安全性方面帶來許多好處,例如實現內部協作以及妥善儲存敏感資訊。

在開發工作方面,網路隔離還可用於實現多層Web應用程式的部署。透過對應用程式進行分層,我們可以將能夠以及不能存取公共互聯網的應用程式劃分為不同的片段,例如通常可以透過這種方式將資料庫層與公共網路隔離,同時仍可從上層拉取修補程式和軟體更新,而不需要直接存取公共互聯網。除了減少攻擊面,這種做法還有助於實現多區部屬。

我們可以透過多種方式來運行多層應用,通常只需要依賴一些最基礎的形式即可獲得最大化的可擴展性、安全性以及可靠性。三層架構是一種最常見的設計形式,這種形式在雲端環境中特別常見。

三層應用程式通常由三個層組成,這些層往往位於不同伺服器上,能夠分別以高度獨立的方式開發和維護。這三層分別是:

  1. **表示層:**管理使用者和應用程式間通訊的外部接口,通常由Web伺服器組成,運行HTML和Web開發程式碼。

  2. **應用程式層:**一種自訂應用程序,提供了必要的業務邏輯,藉此將應用程式「黏合」在一起。

  3. **資料層:**資料庫系統,用於儲存和檢索應用程式中使用的資料。

這三層內容作為獨立的服務,需要透過網路為基礎的API進行通訊。出於安全和效能方面的考慮,應用程式層和資料層通常需要位於同一個本地網路中,並且需要放置在同一個防火牆之後,但每一層的分離也使得我們可以將每個元件部署在不同硬體上,甚至部署到不同的地理位置。實際上可以實現的靈活性主要取決於應用程式的特定需求。

下圖展示了現實世界中一個最基礎的三層Web應用程式。表示層的網路伺服器在瀏覽器視窗中為使用者提供了互動介面;另一端的資料層則是資料庫,該資料庫可以是單獨的系統,或是在網路中以單一實體所代表的叢集。資料庫層方面流行的開源選項包括MySQL、MariaDB、PostgreSQL for SQL、MongoDB以及Cassandra for NoSQL等。

https://ithelp.ithome.com.tw/upload/images/20241207/20164635ZcT8KFPiNJ.png

圖1:三層架構可將Web應用程式分割為表示層、應用程式層和資料層

Web伺服器和資料庫之間還有應用程式層,我們的大部分開發工作可能都是圍繞著這裡進行的。應用程式層包含供應用程式實現目標所需的自訂程式碼和業務邏輯。在前端,Web伺服器會將查詢傳送給應用程式層,隨後應用程式層會回應Web伺服器,並由Web伺服器設定資料格式隨後展示給使用者。在後端,應用程式層將查詢資料庫,接收數據,隨後處理收到的數據,產生使用者所需的資訊或結果。

作為一個非常簡單的例子,我們可以將資料庫想像成儲存了公司銷售記錄的記錄冊。使用者輸入要求,希望得到一段時間內某一特定商品在特定地點的平均日銷售量。
Web伺服器會將請求傳送給應用程式層,應用程式層建構資料庫查詢,接收原始數據,執行必要的計算,隨後將回應傳送回網路伺服器。

https://ithelp.ithome.com.tw/upload/images/20241207/20164635fd4APELDP4.png

圖2:使用者向表示層請求一系列訊息,應用程式層可將請求轉換為資料庫查詢

對於應用程式層來說,Apache Web伺服器可能是最方便的表示層解決方案,而MongoDB可能是最方便的資料層解決方案。而應用程式層的自訂程式碼通常會使用Python、PHP或Ruby等語言編寫。並且在一些現成的程式框架幫助下,我們可以更有效率的開始編寫自己的程式碼,例如Python開發可選擇Django,Ruby開發可選擇Rails,PHP開發可選擇Symfony。

理論上,應用程式層可以和表示層結合在一起,為此只需要向Web伺服器提供直接查詢資料庫所需的必要程式碼,但對於大多數複雜的業務邏輯來說,這種做法並不現實,而且也抵消了應用程式劃分所帶來的好處。

上文提到的「好處」中最重要的一點是:可以減少攻擊面從而提高安全性。如圖1所示,三層解決方案最大限度地減少了必須放置在防火牆之外的應用程式元件。
Web伺服器可以透過安全的API進行通信,其他活動都發生在防火牆內部,更重要的是,都發生在私有位址空間中,因此無法透過互聯網訪問,這樣即可遏制包括SQL注入在內的許多隱患,畢竟SQL注入已經是最常見,也是最具破壞性的漏洞。還好這些隱患通常可以透過對資料庫進行隔離和保護所有直接通訊等方式加以遏制。

三層應用程式帶來的另一個好處是可靠性。當每一層都運行在單獨的伺服器上,運行在不同的實體硬件,甚至在完全不同的資料中心內運行時,一層出現的故障就不太可能影響到其他層。這也有助於進一步提高可擴展性。因為這些獨立運作的元件也可以獨立進行擴充。舉例來說,如果資料庫存取遇到效能瓶頸,即可為資料庫叢集新增更多節點,這個過程對整體運作的影響也是最小的。

三層方法也有助於優化開發流程。連接各層的API以一種支援高效分工的方式將不同元件分開,Web開發者和管理員可以操作和管理Web伺服器,資料庫開發者和管理員可以運行資料庫系統。在這兩者之間,精通應用程式層所用框架技術的專家可以只專注於應用程式程式碼。例如在DevOps場景中,應用程式開發者可以用離線的方式建構並測試新版應用程式程式碼,並在保證對運行只產生最小影響的前提下輕鬆更改應用程式碼。

如果你要著手開發Web應用程序,可以從一開始就考慮採用三層架構。在當今的容器和雲端環境中,我們可以輕鬆地將不同元件分離到不同系統中,而這樣做的好處也是很明顯的:輕鬆快速地建構出更可靠、更安全、可擴展性更高的應用程式.


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言